private void BT_Save_Click(object sender, RoutedEventArgs e) { UserSource.Uname = TEXT_Name.Text; UserSource.Utag = TEXT_Tag.Text; UserSource.Upassword = TEXT_Pwd.Text; SocketTool.GetClientUDP().SendToServer(TheMessageModel.UPDATE_USER(0, UserSource, HeadImageBytes)); }
private string PostToSyncServer(string subUrl, string sentXml) { string result = ""; try { string str = SocketTool.GetUrl(); string url_Imp = SocketTool.GetUrl_Imp(); if (MeetingID.ToLower().StartsWith("i")) { str = url_Imp; } HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(str + subUrl); byte[] bytes = Encoding.UTF8.GetBytes(sentXml); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "text/xml; encoding='utf-8'"; httpWebRequest.ContentLength = bytes.Length; Stream requestStream = httpWebRequest.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close(); WebResponse response = httpWebRequest.GetResponse(); requestStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(requestStream); result = streamReader.ReadToEnd(); streamReader.Close(); requestStream.Close(); response.Close(); return(result); } catch (Exception ex) { LogTool.Debug(ex); return(result); } }
private void BT_SendAddFriendMessage_Click(object sender, RoutedEventArgs e) { ContentControl bt = sender as ContentControl; long num = Convert.ToInt64(bt.Tag); SocketTool.GetClientUDP().SendToServer(TheMessageModel.MAKEFRIEND(UserSource.UloginNumber ?? 0, num, Model.MessageContent.MakeFriendType.SendStart)); }
public static SocketTool GetInstance() { if (instance == null) { instance = new SocketTool(); } return(instance); }
private void OnGUI() { //设置皮肤 GUI.skin = skin; //【未联网状态】 if (currentState == 0) { GUILayout.Label("请输入服务端IP:"); serverIP = GUILayout.TextField(serverIP); GUILayout.Label("请输入服务端Port:"); serverPort = GUILayout.TextField(serverPort); if (GUILayout.Button("创建服务器")) { //创建服务器,服务器收到的回调消息,传输给Log去显示 SocketTool.GetInstance().ServerInit(msg => { log += msg + "\n"; }); //改变状态为【服务器状态】 currentState = 1; } if (GUILayout.Button("连接服务器")) { SocketTool.GetInstance().ClientConnect( serverIP, int.Parse(serverPort), msg => { log += msg + "\n"; }); //改变状态为【客户端状态】 currentState = 2; } } //【服务器状态】 else if (currentState == 1) { //暂无操作 } //【客户端状态】 else if (currentState == 2) { GUILayout.Label("请输入要发送的消息:"); sendMsg = GUILayout.TextField(sendMsg); if (GUILayout.Button("发送...")) { //客户端发送消息 SocketTool.GetInstance().ClientSend(sendMsg); } } //显示日志 GUILayout.Label(log); }
private void MENUITEM_Friends_Click(object sender, RoutedEventArgs e) { MenuItem item = (sender as MenuItem); User SelectedUser = item.DataContext as User; switch (item.Tag.ToString().ToUpper()) { case "DELETEFRIEND": SocketTool.GetClientUDP().SendToServer(TheMessageModel.MAKEFRIEND(UserSource.UloginNumber ?? 0, SelectedUser.UloginNumber ?? 0, MakeFriendType.Delete)) ; break; } }
private void btn_login_Click(object sender, EventArgs e) { var userName = this.txt_userName.Text.Trim(); var password = this.txt_passWord.Text.Trim(); if (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(password)) { MessageBox.Show("请填写完整账号密码密码!"); return; } var message = $"Login {userName} {password} \r\n"; SocketTool.Send(socket, message); }
public override void OnApplyTemplate() { SocketClient = SocketTool.GetClientUDP(); SendMessageCommand = new ActionCommand(() => { MessageContent_String MsgContent = new MessageContent_String(Text); MessageModel msg = new MessageModel(MessageType.String, UserFrom.UloginNumber ?? 0, UserTo.UloginNumber ?? 0, SocketTool.IPV4Address.ToString(), MsgContent); int MsgState = SocketClient.SendTo(msg, StaticResource.ServerIpaddress); SendedMessage?.Invoke(this, UserFrom, UserTo, msg, MsgState); Text = ""; }); SendImageCommand = new ActionCommand(() => { OpenFileDialog SelectDialog = new OpenFileDialog(); SelectDialog.Multiselect = true; SelectDialog.Filter = "*.jpg|*.png"; SelectDialog.ShowDialog(); String[] files = SelectDialog.FileNames; long FromNum = UserFrom.UloginNumber ?? 0; long ToNum = UserTo.UloginNumber ?? 0; foreach (String file in files) { ThreadPool.QueueUserWorkItem(call => { String FileName = ""; SocketTool.TCPSendFile(file, FromNum, ToNum, DataPacketType.ImageDataPacket, out FileName); MessageModel msg = TheMessageModel.IMAGE(FileName, FromNum, ToNum); int MsgState = SocketTool.GetClientUDP().SendToServer(msg); //将自己选择的文件位置作为图片发送出去 MessageContent_Image localImg = MessageModel.ToModel <MessageContent_Image>(msg.MessageContent); localImg.SetContent(file); msg.MessageContent = localImg; Dispatcher.Invoke(() => { SendedMessage?.Invoke(this, UserFrom, UserTo, msg, MsgState); }); Thread.Sleep(1000); }); } }); base.OnApplyTemplate(); }
private static void Init_Instance(string _MeetingID, string _UserID, string _UserName, bool InitToSync) { UserName = _UserName; MeetingID = _MeetingID; _UserID = Socket_FixEmailUserID.ToSocket(_UserID); UserID = _UserID; ClearInstance(); string str = SocketTool.GetUrl(); string url_Imp = SocketTool.GetUrl_Imp(); if (_MeetingID.ToLower().StartsWith("i")) { str = url_Imp; } instance = new SocketClient(str + "/JoinSyncServer", _MeetingID, 100, _UserID, _UserName, InitToSync, 2, "12"); if (ReaderEvent != null) { instance.AddEventManager(ReaderEvent); } instance.AddEventManager(OpenEventList); instance.AddCloseEventManager(CloseEventList); if (CS_0024_003C_003E9__CachedAnonymousMethodDelegate3 == null) { CS_0024_003C_003E9__CachedAnonymousMethodDelegate3 = new ThreadStart(_003CInit_Instance_003Eb__2); } thread = new Thread(CS_0024_003C_003E9__CachedAnonymousMethodDelegate3); thread.IsBackground = false; thread.Start(); for (int i = 0; i < 10; i++) { if (instance != null && instance.GetIsConnected()) { return; } Thread.Sleep(10); } if (instance == null || !instance.GetIsConnected()) { instance = null; } }
private string PostToSyncServer(string subUrl, string sentXml) { string getXml = ""; try { string SyncServerUrl = SocketTool.GetUrl(); string SyncServerUrl_Imp = SocketTool.GetUrl_Imp(); if (MeetingID.ToLower().StartsWith("i") == true) { SyncServerUrl = SyncServerUrl_Imp; } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(SyncServerUrl + subUrl); string data = sentXml; byte[] postData = Encoding.UTF8.GetBytes(data); request.Method = "POST"; request.ContentType = "text/xml; encoding='utf-8'"; request.ContentLength = postData.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(postData, 0, postData.Length); dataStream.Close(); WebResponse response = request.GetResponse(); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); getXml = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); } catch (Exception ex) { LogTool.Debug(ex); } return(getXml); }
private void SocketServer_GetNewMessage(MessageModel Msg, EndPoint From) { Object b = Msg.MessageContent; if (Msg.MessageType == MessageType.Login) { MessageContent_Login info = MessageModel.ToModel <MessageContent_Login>(Msg.MessageContent); //如果是登录消息 if (info.LoginType == LoginType.Submit) { //这里判断是否登录成功,返回一个Result类型的Login信息 if (IsOnline(info.GetContent().UloginNumber ?? 0)) { SocketServer.SendTo(new MessageModel(MessageType.Login, 0, info.GetContent().UloginNumber ?? 0, SocketTool.IPV4Address.ToString(), new MessageContent_Login(LoginType.Result, info.GetContent(), MessageStringMark.GetCodeMsg(MessageStringMark.CodeMessageType.LoginError_UserOnline).ToString())), From); return; } Dispatcher.Invoke(() => { AddOnlineUser(new UserInfo() { UserIP = From, User = info.GetContent(), }); SocketServer.SendTo(new MessageModel(MessageType.Login, 0, info.GetContent().UloginNumber ?? 0, SocketTool.IPV4Address.ToString(), new MessageContent_Login(LoginType.Result, info.GetContent(), MessageStringMark.GetCodeMsg(MessageStringMark.CodeMessageType.LoginSuccess).ToString())), From); }); } //如果是在线确认消息 else if (info.LoginType == LoginType.ImOnline) { long clientNum = info.GetContent().UloginNumber ?? 0; //如果已存在 if (OnlineUsersDateTime.Keys.Where(k => k == clientNum).Count() > 0) { OnlineUsersDateTime[clientNum] = DateTime.Now; } else { //如果不存在就表明已经被下线了 // OnlineUsersDateTime.Add(clientNum, DateTime.Now); } } } else { //!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!! //这里的消息需要手动添加 //不然无法显示出来 MessageContent_Base content_base = MessageModel.ToModel <MessageContent_Base>(Msg.MessageContent); //如果是文字消息 if (Msg.MessageType == MessageType.String) { MessageContent_String info = MessageModel.ToModel <MessageContent_String>(Msg.MessageContent); content_base = info; MessageRouter(); } else if (Msg.MessageType == MessageType.Get) { MessageContent_Get m = MessageModel.ToModel <MessageContent_Get>(Msg.MessageContent); content_base = m; long lnum = long.Parse(m.RequestArg.ToString()); if (m.RequestType == Get_Type.File) { if (m.RequestFileType == File_Type.HeadImagoe) { User u = DB.Users.Where(u => u.UloginNumber == lnum).First(); m.RequestArg = u.UheadImage; } if (IoTool.IsExists(m.RequestArg.ToString())) { m.Content = IoTool.GetFileByte(m.RequestArg.ToString()); } else { m.Content = IoTool.GetFileByte(StaticResource.DefaultUserHeadImageBasePath); } m.RequestArg = lnum.ToString(); } SocketServer.SendTo(new MessageModel(MessageType.Get, 0, Msg.FromLoginNumber, StaticResource.IPV4Address.ToString(), m), From); } else if (Msg.MessageType == MessageType.DataPacket) { MessageContent_DataPacket data = MessageModel.ToModel <MessageContent_DataPacket>(Msg.MessageContent); content_base = data; MessageRouter(); } else if (Msg.MessageType == MessageType.Image) { MessageContent_Image img = MessageModel.ToModel <MessageContent_Image>(Msg.MessageContent); content_base = img; MessageRouter(); } //如果是加好友 else if (Msg.MessageType == MessageType.MakeFriend) { MessageContent_MakeFriend friend = MessageModel.ToModel <MessageContent_MakeFriend>(Msg.MessageContent); content_base = friend; if (friend.MakeFriendType == MakeFriendType.SendStart) { MessageRouter(); } else if (friend.MakeFriendType == MakeFriendType.Success) { DB.Friends.Add(new Friend() { AcceptUser = friend.ToNum, SendUser = friend.FromNum, CreateDate = friend.CreateDate, LockDate = DateTime.UtcNow, }); if (DB.SaveChanges() > 0) { MessageRouter(); } } //如果是删好友 else if (friend.MakeFriendType == MakeFriendType.Delete) { DB.Entry(DB.Friends.Where(f => f.SendUser == friend.FromNum && f.AcceptUser == friend.ToNum || f.SendUser == friend.ToNum & f.AcceptUser == friend.FromNum).First()).State = EntityState.Deleted; //如果数据库删除成功 if (DB.SaveChanges() > 0) { //把消息给两方发过去 friend.MakeFriendType = MakeFriendType.DeleteSuccess; Msg.MessageContent = friend; MessageRouter(); MessageRouterToFrom(); } } } else if (Msg.MessageType == MessageType.UpdateUser) { MessageContent_UpdateUser content = MessageModel.ToModel <MessageContent_UpdateUser>(Msg.MessageContent); Msg.MessageContent = content; User ContentUser = content.GetContent(); User EFuser = DB.Users.Where(u => u.Uid == ContentUser.Uid).First(); String HeadImageSavePath = null; //如果上传头像了 if (content.HeadImageBytes.Length != 0) { //保存图片 把地址放到数据库 HeadImageSavePath = StaticResource.UserHeadImageBasePath + ContentUser.UloginNumber + ".png"; IoTool.SaveFile(HeadImageSavePath, content.HeadImageBytes); EFuser.UheadImage = HeadImageSavePath; } EFuser.Uname = ContentUser.Uname; EFuser.Upassword = ContentUser.Upassword; EFuser.Utag = ContentUser.Utag; DB.Update(EFuser); if (DB.SaveChanges() > 0) { //成功后再把修改后的User发送回去 //如果想要所有人都实时改变就再判断一下分别向好友发送更改后的User content.SetContent(EFuser); Msg.MessageContent = content; MessageRouterToFrom(); } } //将当前消息进行统一处理 void MessageRouter(MessageContent_Base c = null) { if (c != null) { Msg.MessageContent = c; } //如果目标在线 if (IsOnline(Msg.ToLoginNumber)) { UserInfo UserTo = OnlineUsers[Msg.ToLoginNumber]; SocketTool.GetServerUDP().SendTo(Msg, UserTo.UserIP); } //如果目标不在线 //输入到数据库-------------> else { } } //将消息返回给发送者 void MessageRouterToFrom() { //如果目标在线 if (IsOnline(Msg.FromLoginNumber)) { UserInfo UserTo = OnlineUsers[Msg.FromLoginNumber]; SocketTool.GetServerUDP().SendTo(Msg, UserTo.UserIP); } //如果目标不在线 //输入到数据库-------------> else { } } Dispatcher.Invoke(() => { Msg.MessageContent = content_base; DisplayMessageModel msg = new DisplayMessageModel() { IsFrom = true, Msg = Msg, }; LIST_MessageLogs.Items.Add(msg); LIST_MessageLogs.ScrollIntoView(msg); }); } }
public void OnInitMessageRouter() { SocketTool.GetClientUDP().GetNewMessage += ClientSocket_GetNewMessage_ChatForm; }
private void OnApplicationQuit() { //收尾 SocketTool.GetInstance().SocketDispose(); }
private async void RunTool() { SocketTool tool = new SocketTool(); await Task.Run(() => tool.Run()); }
//------------------消息处理----------------- private void ClientSocket_GetNewMessage_ChatForm(MessageModel Msg, System.Net.EndPoint From) { if (Msg.MessageType == MessageType.String) { MessageContent_String c = MessageModel.ToModel <MessageContent_String>(Msg.MessageContent); Msg.MessageContent = c; PrintMessageRouter(); } else if (Msg.MessageType == MessageType.Get) { MessageContent_Get get = MessageModel.ToModel <MessageContent_Get>(Msg.MessageContent); if (get.RequestType == Get_Type.File) { if (get.RequestFileType == File_Type.HeadImagoe) { IoTool.CreateDirectory(StaticResource.UserHeadImageBasePath); String headPath = StaticResource.ToUserHeadImagePath(get.RequestArg + ".png"); IoTool.SaveFile(headPath, get.Content); Dispatcher.Invoke(() => { StaticResource.SetHeadImageSource(long.Parse(get.RequestArg.ToString()), ImageTool.GetUserHeadeImage(long.Parse(get.RequestArg.ToString()))); }); } } } else if (Msg.MessageType == MessageType.Login) { MessageContent_Login login = MessageModel.ToModel <MessageContent_Login>(Msg.MessageContent); if (login.LoginType == LoginType.OffOnLine) { MessageBox.Show(MessageStringMark.GetCodeMsg(login.WithMessage)); Dispatcher.Invoke(() => { OnCloseALL(); }); } } else if (Msg.MessageType == MessageType.DataPacket) { MessageContent_DataPacket packet = MessageModel.ToModel <MessageContent_DataPacket>(Msg.MessageContent); //如果是图片的数据 if (packet.PacketType == DataPacketType.ImageDataPacket) { String fname = packet.FileName; //如果是第一个包 if (packet.PacketIndex == 1) { DataPacketsFile.Add(fname, new WritingFile(StaticResource.MessageImagePath + fname) { Tag = packet.FileToken//这条实在没什么用 }); } DataPacketsFile[fname].Writer(packet.Content); if (packet.IsLastPacket) { DataPacketsFile[fname].WriterEnd(); } } } else if (Msg.MessageType == MessageType.Image) { MessageContent_Image img = MessageModel.ToModel <MessageContent_Image>(Msg.MessageContent); Msg.MessageContent = img; PrintMessageRouter(); } else if (Msg.MessageType == MessageType.MakeFriend) { ChatHotContext DB = new ChatHotContext(); MessageContent_MakeFriend content = MessageModel.ToModel <MessageContent_MakeFriend>(Msg.MessageContent); Msg.MessageContent = content; if (content.MakeFriendType == MakeFriendType.SendStart) { if (MessageBox.Show("好友请求", "来自" + content, MessageBoxButton.YesNoCancel) == MessageBoxResult.Yes) { //这个是返回消息所以是反着来的 //SocketTool.GetClientUDP().SendToServer(TheMessageModel.MAKEFRIEND(content.ToNum, content.FromNum, content.FromNum, content.ToNum, MakeFriendType.Success)); Msg.FromIpaddress = StaticResource.IPV4Address.ToString(); Msg.FromLoginNumber = content.ToNum; Msg.ToLoginNumber = content.FromNum; content.MakeFriendType = MakeFriendType.Success; Msg.MessageContent = content; SocketTool.GetClientUDP().SendToServer(Msg); Dispatcher.Invoke(() => { UserListForm.MainUserListForm.AddFriendsItem(DB.Users.Where(u => u.UloginNumber == content.FromNum).First()); }); } } else if (content.MakeFriendType == MakeFriendType.Success) { MessageBox.Show("对方同意"); Dispatcher.Invoke(() => { UserListForm.MainUserListForm.AddFriendsItem(DB.Users.Where(u => u.UloginNumber == content.ToNum).First()); }); } else if (content.MakeFriendType == MakeFriendType.Fail) { MessageBox.Show("对方拒绝"); } else if (content.MakeFriendType == MakeFriendType.DeleteSuccess) { Dispatcher.Invoke(() => { UserListForm.MainUserListForm.RemoveFriendsItem(UserSource.UloginNumber == content.FromNum ? content.ToNum : content.FromNum); }); } DB.Dispose(); return; } else if (Msg.MessageType == MessageType.UpdateUser) { MessageContent_UpdateUser content = MessageModel.ToModel <MessageContent_UpdateUser>(Msg.MessageContent); StaticResource.ALLUserSource = content.GetContent(); Dispatcher.Invoke(() => { UserInfoChanged(content.GetContent()); }); //PrintMessageRouter(content); } //如果是需要提醒用户的消息就调用一下这个方法 void PrintMessageRouter(Object content = null) { if (content != null) { Msg.MessageContent = content; } //如果存在打开的对应登录号的聊天窗体 if (MainChatForm != null && HasChatUser(Msg.FromLoginNumber)) { Dispatcher.Invoke(() => { User UserFrom = GetUserByChatUsersItem(Msg.FromLoginNumber); PrintMessage(Msg, UserFrom, UserSource); }); } //如果不存在 else { //MessageBox.Show("有新的消息--->>" + Msg.FromLoginNumber); Dispatcher.Invoke(() => { UserListForm.MainUserListForm.AppendToMessageQueue(Msg); }); } } }
static void Main(string[] args) { SocketTool.OnStart(); }
public virtual void ReceiveCallback(IAsyncResult ar) { if (TotalSession >= 10000) { TotalSession = 0; } TotalSession++; System.Net.Sockets.Socket handler = ConnectSocket; var srb = ar.AsyncState as SocketReceiveBack; try { if (handler != null && !handler.Connected) //当近端主动Disconnect时会触发 { Sktconfig?.DisConnectCallback?.Invoke(this); LogMsg(handler.LocalEndPoint.ToString(), handler.RemoteEndPoint.ToString(), $"disconnect remote {handler.RemoteEndPoint}\r\n"); return; } //最大是设置的msgbuffer的长度,如果发送的数据超过了buffer的长度就分批次接收 //这里在客户端强制关闭也会进去这个回调,但是执行到EndReceive时会出错 SocketError se; var rEnd = handler?.EndReceive(ar, out se); if (rEnd > 0 && srb != null) { var receiveBytes = srb.Buffer.Take(rEnd.Value).ToArray(); if (LastSessionTime == DateTime.MinValue) {//websockethttp协议升级 #region 分析报文、文本 LastSessionTime = DateTime.Now; string receiveText = Encoder.GetString(receiveBytes); //确认客户端发送的是websocket握手协议包,解析出key if (receiveText.IndexOf("Sec-WebSocket-Version:", StringComparison.Ordinal) != -1) { SocketConnectType = SocketConnectType.WebSocket; string[] rawClientHandshakeLines = receiveText.Split(new [] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string secwebSocketKey = rawClientHandshakeLines.FirstOrDefault(e => e.Contains("Sec-WebSocket-Key:")); string acceptKey = SocketTool.ComputeWebSocketHandshakeSecurityHash09( secwebSocketKey?.Substring(secwebSocketKey.IndexOf(":", StringComparison.Ordinal) + 2)); var newHandshake = Encoder.GetBytes(SocketTool.ComputeNewHandshake(acceptKey)); //返回websocket握手包 handler.BeginSend(newHandshake, 0, newHandshake.Length, 0, SendCallback, null); handler.BeginReceive(srb.Buffer, 0, BufferSize, 0, ReceiveCallback, srb); LogMsg(handler.LocalEndPoint.ToString(), handler.RemoteEndPoint.ToString(), $"from remote {handler.RemoteEndPoint} webSocket first session receive data [{receiveText}]\r\n"); return; } #endregion } else if (SocketConnectType == SocketConnectType.WebSocket) {//websocket解析明文内容 receiveBytes = new DataFrame(receiveBytes).Content; } #region 解析每一个数据包 //LogMsg(handler.LocalEndPoint.ToString(), handler.RemoteEndPoint.ToString(), $"current session from remote {handler.RemoteEndPoint} receive data [{ BitConverter.ToString(receiveBytes)}]\r\n"); var bytepackage = GetPackage(receiveBytes); int queeCount = bytepackage.Count; handler.BeginReceive(srb.Buffer, 0, BufferSize, 0, ReceiveCallback, srb); for (int i = 0; i < queeCount; i++) { //下面是正常业务逻辑处理 var bytemsg = bytepackage.Dequeue(); if (bytemsg.Length == 0) { continue; } LogMsg(handler.LocalEndPoint.ToString(), handler.RemoteEndPoint.ToString(), $"from {handler.RemoteEndPoint} receive [{ BitConverter.ToString(bytemsg)}]\r\n"); if (srb.MsgRecevieCallBack != null) { srb.MsgRecevieCallBack(bytemsg, this); } else { Sktconfig?.ReceiveCallback?.Invoke(bytemsg, this); } //else //如果回调是空就原样返回,正常收发可达5000次/s //{ // Send(bytemsg); //} } #endregion } else //远端主动Disconnect时会到达这里 { if (handler != null) { Sktconfig?.DisConnectCallback?.Invoke(this); LogMsg(handler.LocalEndPoint.ToString(), handler.RemoteEndPoint.ToString(), $"remote {handler.RemoteEndPoint} has close\r\n"); } } LastSessionTime = DateTime.Now; } catch (SocketException sktex) { SocketException(handler, sktex); } catch (Exception ex) { Exception(ex); } }
private static void Init_Instance(string _MeetingID, string _UserID, string _UserName, bool InitToSync) { UserName = _UserName; MeetingID = _MeetingID; _UserID = Socket_FixEmailUserID.ToSocket(_UserID); UserID = _UserID; ClearInstance(); //if (thread != null) //{ // thread.Abort(); //} //if (instance != null) //{ // instance = null; //} // new SocketClient(syncServerUrl, meetingId, maxClient, clientId, clientName, isSync, clientType, func, true); // clientType 2是PC string SyncServerUrl = SocketTool.GetUrl(); string SyncServerUrl_Imp = SocketTool.GetUrl_Imp(); if (_MeetingID.ToLower().StartsWith("i") == true) { SyncServerUrl = SyncServerUrl_Imp; } instance = new SocketClient(SyncServerUrl + "/JoinSyncServer", _MeetingID, 100, _UserID, _UserName, InitToSync, 2, "12"); if (ReaderEvent != null) { instance.AddEventManager(ReaderEvent); } instance.AddEventManager(OpenEventList); instance.AddCloseEventManager(CloseEventList); thread = new Thread(delegate() { try { //run()方法是無窮迴圈,所以要開Thread去跑 if (instance != null) { instance.run(); } } catch (Exception ex) { LogTool.Debug(ex); } }); thread.IsBackground = true; thread.Start(); // 延遲一下,等待IEventManager.run 開始跑。 //Thread.Sleep(100); int i = 0; while (i < 10) { if (instance != null && instance.GetIsConnected() == true) { return; } Thread.Sleep(10); i++; } if (instance == null || instance.GetIsConnected() == false) { instance = null; } }
/// <param name="From">当前客户端的用户</param> /// <param name="To">与当前客户端聊天的用户</param> public ChatTextBox(SocketTool socket, User From, User To) { SocketClient = socket; UserFrom = From; UserTo = To; }
/// <param name="From">当前客户端的用户</param> /// <param name="To">与当前客户端聊天的用户</param> public ChatTextBox(User From, User To) { SocketClient = SocketTool.GetClientUDP(); UserFrom = From; UserTo = To; }