private void tcpClient_PacketReceived(object sender, TcpSessionEventArgs e) { object obj = Factory.CreateInstanceObject(e.Data); ImageFileMsg fileMsg = obj as ImageFileMsg; if (fileMsg != null) //如果收到的消息对像不为空 { if (fileMsg.type == type.New) //服务器允许上传文件 { OnFileTransmitBefore(); } //触发文件传输前事件 else if (fileMsg.type == type.set) { TCPSendFile(fileMsg); } //发送文件到服务器 else if (fileMsg.type == type.get) { ReceivedFileBlock(fileMsg); } else if (fileMsg.type == type.over)//文件传输结束 { Console.WriteLine("over!"); OnFileTransmitted();//触发文件传输完成事件 } } }
private void fileSession_PacketReceived(object sender, TcpSessionEventArgs e) { if (e.Data.Length < 2) { return; } TCPServerSession Session = sender as TCPServerSession; if (DateTime.Now > Session.ConnectTime.AddSeconds(20)) {//如果客户端连接服务器的时间大于20秒,则视为非法攻击,断开联接 Session.Disconnect(); Session.Dispose(); } object obj = Factory.CreateInstanceObject(e.Data); if (obj != null) //如果收到的消息对像不为空 { if (obj is ImageFileMsg) //文件传输 { onFileTransmit(obj as ImageFileMsg, Session); } } else //收到非法消息 { OnBadCommand(Session); } }
/// <summary> /// TCP连接数据包到达事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void messageSession_PacketReceived(object sender, TcpSessionEventArgs e) { Console.WriteLine(e.Data); if (e.Data.Length < 2) { return; } TCPServerSession Session = sender as TCPServerSession; object obj = Factory.CreateInstanceObject(e.Data); if (obj != null) //如果收到的消息对像不为空 { if (obj is Auth) //登录请求 { if (Login != null) { Login(this, new MsgServerEventArgs(Session, e.Data, obj, null)); } } else if (Session.IsAuthenticated) //如果提供其他服务客户端必须是已经进行验证后 { UserVcard RequestUser = Session.Tag as UserVcard; //获得请求用户 if (RequestUser == null) { return; //如果用户为空,退出 } if (obj is Message) //请求转发消息 { if (Message != null) { Message(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is Presence) //请求在线状态 { if ((obj as Presence).type == type.set) //设置在线状态 { if (Presence != null) { Presence(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if ((obj as Presence).type == type.get)//获得联系人在线状态 { if (RequestUsersPresence != null) { RequestUsersPresence(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } } else if (obj is DownloadGroups)//请求下载的分组信息 { if (RequestOrgGroups != null) { RequestOrgGroups(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is DownloadUsers)//请求下载用户信息 { if (RequestOrgUsers != null) { RequestOrgUsers(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is DownloadRooms)//请求下载群信息 { if (RequestOrgRooms != null) { RequestOrgRooms(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is ChangeRoom)//更新群信息 { if (RequestChangeRoom != null) { RequestChangeRoom(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is ImageFileMsg) //通知客户端到文件服务器下载已上传完成的文件 { if (RouteDownLoadImageFile != null) { RouteDownLoadImageFile(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is P2PFileMsg) //转发文件传输消息 { if (RouteP2PFileTransmit != null) { RouteP2PFileTransmit(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is AVMsg)//转发音视频对话的消息 { if (RouteAVMsg != null) { RouteAVMsg(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } #region 组织架构信息管理 if (obj is UserVcard)//如果是管理员变更用户信息资料 { if (RequestChangeUserVcard != null) { RequestChangeUserVcard(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is GroupVcard)//如果是管理员变更分组信息资料 { if (RequestChangeGroupVcard != null) { RequestChangeGroupVcard(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } else if (obj is ChangePassword)//如果是要求修改密码 { if (RequestChangePassword != null) { RequestChangePassword(this, new MsgServerEventArgs(Session, e.Data, obj, RequestUser)); } } #endregion } } else //收到非法消息 { OnBadCommand(Session); } }
/// <summary> /// TCP连接数据包到达事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void messageSession_PacketReceived(object sender, TcpSessionEventArgs e) { Console.WriteLine(e.Data); if (e.Data.Length < 2) { return; } TCPServerSession Session = sender as TCPServerSession; object obj = Factory.CreateInstanceObject(e.Data); if (obj != null) //如果收到的消息对像不为空 { if (obj is Auth) //登录请求 { onLogin(obj as Auth, Session); } else if (Session.IsAuthenticated) //如果提供其他服务客户端必须是已经进行验证后 { UserVcard requestUser = Session.Tag as UserVcard; //获得请求用户 if (obj is Message)//请求转发消息 { onMessage(obj as Message, Session); } else if (obj is Presence) //请求在线状态 { if ((obj as Presence).type == type.set) //设置在线状态 { onPresence(obj as Presence, Session); } else if ((obj as Presence).type == type.get)//获得联系人在线状态 { onGetUsersPresence(obj as Presence, Session); } } else if (obj is Groups)//请求下载的分组信息 { onOrgGroups(obj as Groups, Session); } else if (obj is Users)//请求下载用户信息 { onOrgUsers(obj as Users, Session); } else if (obj is Rooms)//请求下载群信息 { onOrgRooms(obj as Rooms, Session); } else if (obj is ChangeRoom)//更新群信息 { onChangeRoom(obj as ChangeRoom, Session); } else if (obj is TCPImageFile)//通知客户端到文件服务器下载已上传完成的文件 { onTCPImageFile(obj as TCPImageFile, e.Data, Session); } else if (obj is PFile)//转发文件传输消息 { onPFile(obj as PFile, e.Data, Session); } #region 组织架构信息管理 if (obj is UserVcard)//如果是管理员变更用户信息资料 { onUserVcard(obj as UserVcard, e.Data, Session); } else if (obj is GroupVcard) { onGroupVcard(obj as GroupVcard, e.Data, Session); } else if (obj is ChangePassword) { onChangePassword(obj as ChangePassword, e.Data, requestUser); } #endregion } } else //收到非法消息 { OnBadCommand(Session); } }