public netMessage readMessage(System.Net.Sockets.NetworkStream stream) { BinaryFormatter bf = new BinaryFormatter(); netMessage nm = bf.Deserialize(stream) as netMessage; return(nm); }
void clientProcess(object tcpClientObject) { TcpClient client = tcpClientObject as TcpClient; NetworkStream netStream = client.GetStream(); while(true){ //итак узнаем что же он хочет от нас? netMessage nm = new netMessage(); try { nm = nm.readMessage(netStream); } catch (Exception ex) { return; } switch (nm.code){ case netMessageType.getMapsListRequest: //список карт returnGamesList(netStream); netStream.Close(); return; case netMessageType.getMapRequest: returnMapData(netStream, nm as getMapRequest); netStream.Close(); return; case netMessageType.newUserRequest: var user=newUser(nm as newUserRequest, netStream); if (user != null) { lock (games) { user.ListenClient = client; } userListenLoop(user); lock (games) { user.Game.Users.Remove(user.Name); users.Remove(user.Name); } client.Close(); } return; case netMessageType.secondConnectionRequest: string uname = (nm as secondConnectionRequest).userName; lock (games) { users[uname].SendClient = client; } break; } } }
void reciveMessagesLoop() { reciveClient = new TcpClient(); try { reciveClient.Connect(sendClient.Client.RemoteEndPoint as System.Net.IPEndPoint); }catch(Exception ex){ MessageBox.Show(ex.Message, "Ошибка при попытке открыть второе подключение", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); return; } secondConnectionRequest scr = new secondConnectionRequest(); scr.userName = me.name; scr.sendMessage(reciveClient.GetStream()); netMessage message = new netMessage(); try { while (true) { message = message.readMessage(reciveClient.GetStream()); switch (message.code) { case netMessageType.usersFromServer: updateUsersTable(message as messageUsersFromServer); break; } } }catch(Exception ex){ MessageBox.Show(ex.Message, "Ошибка чтения данных от сервера", MessageBoxButtons.OK, MessageBoxIcon.Error); reciveClient.Close(); return; } }
void userListenLoop(clsUser user) { netMessage message = new netMessage(); while (true) { try { message = message.readMessage(user.ListenClient.GetStream()); } catch (Exception ex) { return; } switch (message.code) { case netMessageType.userToServer: lock (games) { user.X = (message as messageUserToServer).x; user.Y = (message as messageUserToServer).y; sendNewCoordinates(user.Game.Map.name,user); } break; } } }