/// <summary> /// 发送网络消息 /// </summary> /// <param name="opCode"></param> /// <param name="subCode"></param> /// <param name="value"></param> public void Send(int opCode, int subCode, object value) { SocketMsg msg = new SocketMsg(opCode, subCode, value); byte[] data = EncoderTool.EncodeMsg(msg); byte[] packet = EncoderTool.EnconderPacket(data); Send(packet); }
/// <summary> /// 发送网络消息 /// </summary> /// <param name="opCode"></param> /// <param name="subCode"></param> /// <param name="value"></param> public void Send(int opCode, int subCode, object value) { SocketMsg msg = new SocketMsg(opCode, subCode, value); byte[] data = EncoderTool.EncodeMsg(msg); byte[] packet = EncoderTool.EncoderPacket(data); sendQueue.Enqueue(packet); if (!isSendProcess) { ProcessSend(); } //try //{ clientSocket.Send(packet); } //catch (Exception e) //{ Console.WriteLine(e.Message); } }
/// <summary> /// 处理接收的数据 /// </summary> public void ProcessReceive() { isReceiveProcess = true; byte[] data = EncoderTool.DecoderPacket(ref dataCache); if (data == null) { isReceiveProcess = false; return; } SocketMsg msg = EncoderTool.DecodeMsg(data); //解析完毕回调给上层 if (receiveCompleted != null) { receiveCompleted(this, msg); } ProcessReceive(); }
/// <summary> /// 处理接收的数据 /// </summary> private void ProcessReceive() { isReceiveProcess = true; byte[] data = EncoderTool.DeconderPacket(ref dataCache); if (data == null) { isReceiveProcess = false; return; } //TODO 需要再次转成一个具体的类型供使用 SocketMsg msg = EncoderTool.DeCodeMsg(data); //回调给上层 if (receiveCompleted != null) { receiveCompleted(this, msg); } //尾递归 ProcessReceive(); }