void HandleIncomingConnectionRequest(SharpSerializer incomingData, TcpClient client) { IncomingConnectionRequests request = (IncomingConnectionRequests)incomingData.ReadByte(); if (request == IncomingConnectionRequests.RoomDetails) { //Sending Room Details And Goodby SharpRoomDetails room_details = this.room.GetAsDetails(); SharpSerializer respond = SharpSerializer.Create(); room_details.Write(ref respond); TCPMessageHandler.Write(client, respond.DataAndPost()); TCPMessageHandler.CloseConnection(client); return; } else if (request == IncomingConnectionRequests.ConnectionApprove) { SharpSerializer respond = SharpSerializer.Create(); SharpClient incomingClient = new SharpClient(ref incomingData); if (this.room.isFull) { respond.Write((byte)IncomingConnectionResponse.ServerIsFull); TCPMessageHandler.Write(client, respond.DataAndPost()); TCPMessageHandler.CloseConnection(client); return; } if (this.room.isExistName(incomingClient.ClientName)) { respond.Write((byte)IncomingConnectionResponse.NameIsExist); TCPMessageHandler.Write(client, respond.DataAndPost()); TCPMessageHandler.CloseConnection(client); return; } string incomingPassword = incomingData.ReadString(); if (!this.room.isValidPassword(incomingPassword)) { respond.Write((byte)IncomingConnectionResponse.WrongPassword); TCPMessageHandler.Write(client, respond.DataAndPost()); TCPMessageHandler.CloseConnection(client); return; } HandleAcceptedConnection(client, incomingClient); } else { TCPMessageHandler.CloseConnection(client); } }
void S_OnClientDisconnected(SharpClient client) { #region Broadcasting Other Clients SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.ClientDisconnected); ser.Write(client.NetworkID); Broadcast(ser.DataAndPost(), client); #endregion SharpNetworking.Instance.OnClientDisconnected(client); room.RemoveClient(client); #region Closing Socket & Thread try { TCPMessageHandler.CloseConnection(client.Connection); } catch { } try { client.ListeningThread.Abort(); } catch { } client.ListeningThread = null; #endregion }
public void SendMessage(int Channel, byte[] data, List <SharpClient> clients) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.DirectData); ser.Write((short)0); ser.Write(Channel); ser.Write(data.Length); ser.Write(data); byte[] rawData = ser.DataAndPost(); foreach (var item in clients) { if (item.isMine) { S_OnReceivedData(serverclient, Channel, data); } else { item.SendMessage(rawData); } } }
public void SendMessage(int Channel, byte[] data, SharpClient client) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.DirectData); ser.Write((short)0); ser.Write(Channel); ser.Write(data.Length); ser.Write(data); if (client.isMine) { S_OnReceivedData(serverclient, Channel, data); } else { client.SendMessage(ser.DataAndPost()); } if (ser.inUse) { ser.Post(); } }
void HandleAcceptedConnection(TcpClient client, SharpClient sclient) { SharpSerializer syncPack = SharpSerializer.Create(); syncPack.Write((byte)IncomingConnectionResponse.Approved); short netID = this.room.NextFreeID; sclient.AssingNetID(netID); syncPack.Write(netID); this.room.Write(ref syncPack); TCPMessageHandler.Write(client, syncPack.DataAndPost()); this.room.AssignClient(sclient); Thread t = new Thread(() => ListenClient(sclient)); sclient.ListeningThread = t; sclient.Connection = client; t.Start(); S_OnClientConnected(sclient); }
void S_OnClientConnected(SharpClient client) { #region Broadcasting To Other clients SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.ClientConnected); client.Write(ref ser); Broadcast(ser.DataAndPost(), client); #endregion SharpNetworking.Instance._OnClientConnected(client); }
public void SendMessage(int Channel, byte[] data, SharpClient client) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.MessageType2); ser.Write(client.NetworkID); ser.Write(Channel); ser.Write(data.Length); ser.Write(data); Server.SendMessage(ser.DataAndPost()); }
public void SendMessage(int Channel, byte[] data, SharpTargets targets) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.MessageType1); ser.Write((byte)targets); ser.Write(Channel); ser.Write(data.Length); ser.Write(data); Server.SendMessage(ser.DataAndPost()); }
public void SendMessage(int Channel, byte[] data, SharpTargets targets) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.DirectData); ser.Write((short)0); ser.Write(Channel); ser.Write(data.Length); ser.Write(data); if (targets == SharpTargets.All) { Broadcast(ser.DataAndPost(), null); S_OnReceivedData(serverclient, Channel, data); } else if (targets == SharpTargets.ClientsOnly) { Broadcast(ser.DataAndPost(), null); } else if (targets == SharpTargets.OtherClientsOnly) { Broadcast(ser.DataAndPost(), null); } else if (targets == SharpTargets.Others) { Broadcast(ser.DataAndPost(), null); } else if (targets == SharpTargets.Server) { S_OnReceivedData(serverclient, Channel, data); } if (ser.inUse) { ser.Post(); } }
public void SendMessage(int Channel, byte[] data, List <SharpClient> clients) { SharpSerializer ser = SharpSerializer.Create(); ser.Write((byte)SharpConnectionMessages.MessageType3); ser.Write((short)clients.Count); foreach (var item in clients) { ser.Write(item.NetworkID); } ser.Write(Channel); ser.Write(data.Length); ser.Write(data); Server.SendMessage(ser.DataAndPost()); }
void S_OnReceivedMessage(SharpClient sender, byte[] data) { SharpSerializer ser = SharpSerializer.Create(data); SharpConnectionMessages type = (SharpConnectionMessages)ser.ReadByte(); if (type == SharpConnectionMessages.MessageType1) { #region Message Type 1 SharpTargets targets = (SharpTargets)ser.ReadByte(); int channel = ser.ReadInt32(); int size = ser.ReadInt32(); byte[] rawData = ser.ReadBytes(size); if (targets == SharpTargets.Server) { S_OnReceivedData(sender, channel, rawData); return; } SharpSerializer package = SharpSerializer.Create(); package.Write((byte)SharpConnectionMessages.DirectData); package.Write(sender.NetworkID); package.Write(channel); package.Write(size); package.Write(rawData); if (targets == SharpTargets.All) { Broadcast(package.DataAndPost(), null); S_OnReceivedData(sender, channel, rawData); } else if (targets == SharpTargets.ClientsOnly) { Broadcast(package.DataAndPost(), null); } else if (targets == SharpTargets.OtherClientsOnly) { Broadcast(package.DataAndPost(), sender); } else if (targets == SharpTargets.Others) { Broadcast(package.DataAndPost(), sender); S_OnReceivedData(sender, channel, rawData); } #endregion } else if (type == SharpConnectionMessages.MessageType2) { #region Message Type 2 short targetID = ser.ReadInt16(); int channel = ser.ReadInt32(); int size = ser.ReadInt32(); byte[] rawData = ser.ReadBytes(size); if (targetID == 0) { S_OnReceivedData(sender, channel, rawData); return; } SharpSerializer package = SharpSerializer.Create(); package.Write((byte)SharpConnectionMessages.DirectData); package.Write(sender.NetworkID); package.Write(channel); package.Write(size); package.Write(rawData); this.room.Get(targetID).SendMessage(package.DataAndPost()); #endregion } else if (type == SharpConnectionMessages.MessageType3) { #region Message Type 3 short targetCount = ser.ReadInt16(); short[] targets = new short[targetCount]; for (int i = 0; i < targetCount; i++) { targets[i] = ser.ReadInt16(); } int channel = ser.ReadInt32(); int size = ser.ReadInt32(); byte[] rawData = ser.ReadBytes(size); SharpSerializer package = SharpSerializer.Create(); package.Write((byte)SharpConnectionMessages.DirectData); package.Write(sender.NetworkID); package.Write(channel); package.Write(size); package.Write(rawData); byte[] goData = package.DataAndPost(); for (int i = 0; i < targets.Length; i++) { if (targets[i] == 0) { S_OnReceivedData(sender, channel, rawData); } else { this.room.Get(targets[i]).SendMessage(goData); } } #endregion } }
public bool Connect(string IP, int Port, string Password, SharpClient Self, out ConnectResults result) { if (Password == null) { Password = ""; } if (this.connected) { result = ConnectResults.AlreadyConnected; return(false); } try { server_client = new TcpClient(); IPAddress address = null; #region IP Parse try { address = IPAddress.Parse(IP); } catch { result = ConnectResults.InvalidIpAddress; return(false); } #endregion IPEndPoint remoteAddress = new IPEndPoint(address, Port); #region Physical Connetion try { server_client.Connect(remoteAddress); } catch { result = ConnectResults.UnhandledException; return(false); } #endregion #region ID Self SharpSerializer hailMessage = SharpSerializer.Create(); hailMessage.Write((byte)IncomingConnectionRequests.ConnectionApprove); Self.Write(ref hailMessage); hailMessage.Write(Password); TCPMessageHandler.Write(server_client, hailMessage.DataAndPost()); #endregion #region Wait For Response byte[] responseRaw = TCPMessageHandler.Read(server_client); SharpSerializer response = SharpSerializer.Create(responseRaw); #endregion IncomingConnectionResponse message = (IncomingConnectionResponse)response.ReadByte(); if (message == IncomingConnectionResponse.WrongPassword) { TCPMessageHandler.CloseConnection(server_client); result = ConnectResults.InvalidPassword; return(false); } if (message == IncomingConnectionResponse.ServerIsFull) { TCPMessageHandler.CloseConnection(server_client); result = ConnectResults.ServerIsFull; return(false); } if (message == IncomingConnectionResponse.NameIsExist) { TCPMessageHandler.CloseConnection(server_client); result = ConnectResults.NameIsExist; return(false); } short myID = response.ReadInt16(); Self.AssingNetID(myID); this.room = new SharpRoom(ref response); this.listenerThread = new Thread(ListenServer); this.listenerThread.Start(); connected = true; me = Self; room.AssignClient(me); room.Server.Connection = server_client; room.Server.ListeningThread = listenerThread; C_OnConnected(room); result = ConnectResults.Succes; return(true); } catch (Exception e) { try { TCPMessageHandler.CloseConnection(server_client); } catch { } server_client = null; connected = false; try { listenerThread.Abort(); } catch { } listenerThread = null; me = null; room = null; result = ConnectResults.UnhandledException; return(false); } }