/// <summary> /// 接收到请求的处理 /// </summary> /// <param name="info"></param> private void client_OnMsgReceived(byte[] info) { SocketRequest requestMsg = ByteSerializer.DeserializeByte <SocketMsgBase>(info) as SocketRequest; if (requestMsg != null) { Console.WriteLine("子系统{0}请求执行{1}方法", requestMsg.SubSystem, requestMsg.RequestMethod); SocketResponse response = new SocketResponse(); string result = string.Empty; try { result = OperationFactory.Execute(requestMsg.Parameters, requestMsg.RequestMethodType); response.Result = result; } catch (Exception ex) { response.ErrorMsg = "执行遇到异常"; } response.MethodName = requestMsg.MethodName; response.Sender = requestMsg.Target; response.SubSystem = requestMsg.SubSystem; response.Target = requestMsg.Sender; response.MsgType = TcpMsgDataType.Relay; client.Send(ByteSerializer.ObjectToByte(response)); Console.WriteLine("执行成功,已返回结果"); } }
private void client_OnServerConnected(object sender, TcpServerConnectedEventArgs e) { //链接成功,向服务器发送学校编号。 SocketMsgBase baseMsg = new SocketMsgBase(); baseMsg.LinkType = "1"; baseMsg.MsgType = TcpMsgDataType.ClientToken; baseMsg.Sender = schoolNum; baseMsg.SubSystem = TcpSeatManageSubSystem.SocketClient; client.Send(ByteSerializer.ObjectToByte(baseMsg)); }
/// <summary> /// 转发socket消息 , /// </summary> /// <param name="uid">请求的目标ID。</param> /// <param name="msg">如果msg类型为Request,即客户端请求学校,需要转发给学校。否则为学校响应客户端的请求。</param> private void RelaySocketMsg(string uid, SocketMsgBase msg) { try { msg.Sender = uid; if (schoolNums.ContainsKey(msg.Target)) { server.Send(schoolNums[msg.Target], ByteSerializer.ObjectToByte(msg)); Console.WriteLine("{0:M} {1:t}:转发给目标{2},地址为:{3}", DateTime.Now, DateTime.Now, msg.Target, schoolNums[msg.Target]); } else { if (msg is SocketRequest) { Console.WriteLine("{0:M} {1:t}:请求的目标{2}不存在", DateTime.Now, DateTime.Now, msg.Target); SocketResponse response = new SocketResponse(); response.SubSystem = msg.SubSystem; response.MethodName = msg.MethodName; response.Sender = response.Target; response.Target = response.Sender; response.ErrorMsg = "学校没有连接"; server.Send(uid, ByteSerializer.ObjectToByte(response)); } else if (msg is SocketResponse) { // Console.WriteLine("消息回复给{0}", msg.Target); Console.WriteLine("{0:M} {1:t}:消息回复给{2}", DateTime.Now, DateTime.Now, msg.Target); server.Send(msg.Target, ByteSerializer.ObjectToByte(msg)); } } } catch (Exception ex) { WriteLog.Write(string.Format("RelaySocketMsg执行遇到异常:{0},异常来自:{1}", ex.Message, ex.Source)); } }