void server_OnMsgReceived(string uid, SocketMsgData.SocketMsgBase e) { try { SocketMsgData.SocketMsgBase msg = e; if (msg.SubSystem == SocketMsgData.TcpSeatManageSubSystem.SocketClient && msg.MsgType == SocketMsgData.TcpMsgDataType.ClientToken) { if (schoolNums.ContainsKey(msg.Sender)) { schoolNums[msg.Sender] = uid; } else { schoolNums.Add(msg.Sender, uid); } Console.WriteLine("{0:M} {1:t}:学校{2}已建立连接", DateTime.Now, DateTime.Now, msg.Sender); SeatManage.SeatManageComm.WriteLog.Write(schoolLinkLog, string.Format("学校{0}已连接,Ip地址:{1}", msg.Sender, uid)); if (OnSchoolConnectionHandler != null) { OnSchoolConnectionHandler(msg.Sender, uid); } } else { if (OnReceivedMsg != null) { OnReceivedMsg(msg); } switch (msg.MsgType) { case TcpMsgDataType.Relay: RelaySocketMsg(uid, msg); break; case TcpMsgDataType.WeiXinNotice: SocketMsgData.SocketRequest request = msg as SocketMsgData.SocketRequest; weixinNoticeSend(request); break; } } } catch (Exception ex) { SeatManage.SeatManageComm.WriteLog.Write(string.Format("消息处理失败:{0},异常来自:{1}", ex.Message, ex.Source)); } }
/// <summary> /// 转发socket消息,即客户端发来的是请求学校服务器的消息 /// </summary> /// <param name="uid"></param> /// <param name="msg"></param> private void RelaySocketMsg(string uid, SocketMsgData.SocketMsgBase msg) { try { msg.Sender = uid; if (schoolNums.ContainsKey(msg.Target)) { server.Send(schoolNums[msg.Target], SeatManage.SeatManageComm.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, SeatManage.SeatManageComm.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, SeatManage.SeatManageComm.ByteSerializer.ObjectToByte(msg)); } } } catch (Exception ex) { SeatManage.SeatManageComm.WriteLog.Write(string.Format("RelaySocketMsg执行遇到异常:{0},异常来自:{1}", ex.Message, ex.Source)); } }