//
// ViewController.swift
// socket练习-聊天室客户端
//
// Created by admin on 16/3/16.
// Copyright © 2016年 jin. All rights reserved.
//
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,GCDAsyncSocketDelegate {
@IBOutlet weak var messageTableView: UITableView!
@IBOutlet weak var messageTextField: UITextField!
@IBOutlet weak var messageView: UIView!
var socket:GCDAsyncSocket?
override func viewDidLoad() {
super.viewDidLoad()
self.messageTableView.delegate = self
self.messageTableView.dataSource = self
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardFrameChange:"), name: UIKeyboardWillChangeFrameNotification, object: nil)
self.view.bringSubviewToFront(self.messageView)
}
func keyboardFrameChange(not:NSNotification)
{
/**
{
UIKeyboardAnimationCurveUserInfoKey = 7;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {375, 258}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {187.5, 796}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {187.5, 538}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 667}, {375, 258}}";
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 409}, {375, 258}}";
UIKeyboardIsLocalUserInfoKey = 1;
}
*/
let begingFrame:CGPoint = (not.userInfo!["UIKeyboardCenterBeginUserInfoKey"]?.CGPointValue)!
let endFrame:CGPoint = (not.userInfo!["UIKeyboardCenterEndUserInfoKey"]?.CGPointValue)!
if (begingFrame.y - endFrame.y) > 0
{
// 弹出
self.messageView.transform = CGAffineTransformMakeTranslation(0, -(begingFrame.y - endFrame.y))
}
else
{
self.messageView.transform = CGAffineTransformIdentity
}
}
deinit
{
NSNotificationCenter.defaultCenter().removeObserver(self)
}
// 建立连接
@IBAction func connection(sender: UIBarButtonItem) {
//ios里实现sokcet的连接,使用C语言
// 1.与服务器通过三次握手建立连接
let host:CFString = "127.0.0.1"
let port:UInt16 = 52013
self.socket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_global_queue(0, 0))
let res = try? self.socket?.connectToHost(host as String, onPort: port)
if res != nil
{
print("ok")
}
else
{
print("error")
}
}
// 连接完成
func socket(sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) {
print("连接")
}
func socketDidDisconnect(sock: GCDAsyncSocket!, withError err: NSError!) {
if err == nil
{
print("断开连接")
}
else
{
print("发生错误了。。。。")
}
}
// 写入数据,需要读取下,不然后面不能进行
func socket(sock: GCDAsyncSocket!, didWriteDataWithTag tag: Int) {
socket?.readDataWithTimeout(-1, tag: tag)
}
// 读取数据
func socket(sock: GCDAsyncSocket!, didReadData data: NSData!, withTag tag: Int) {
let res = NSString(data: data, encoding: NSUTF8StringEncoding)
if tag == 8888
{
print(res)
}
else if tag == 6888
{
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.messages.append(res!)
self.messageTableView.reloadData()
})
}
}
@IBAction func login(sender: UIBarButtonItem) {
let str = "login:zhangsan"
self.socket?.writeData(str.dataUsingEncoding(NSUTF8StringEncoding), withTimeout: -1, tag: 8888)
}
var messages:[NSString] = []
@IBAction func sendMessage(sender: UITextField) {
let message:NSString = sender.text!
if(message.length > 0)
{
self.socket?.writeData("message:\(message)".dataUsingEncoding(NSUTF8StringEncoding), withTimeout: -1, tag: 6888)
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.messages.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("MessageCell")
cell?.textLabel?.text = self.messages[indexPath.row] as String
return cell!
}
}