public bool Send(byte[] buff, int offset, int count) { try { if (!IsConnected()) { Disconnect(); return(false); } if (Sock.Send(buff, offset, count, SocketFlags.None) <= 0) { Disconnect(); return(false); } var data = new DataEventArgs(this, buff, count); OnDataSent(this, data); return(true); } catch (Exception ex) { #if DEBUG Console.WriteLine(ex.ToString()); #endif Disconnect(); return(false); } }
public async Task <RPCResponse> SendAndWait(RPC c) { var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(30)); var tcs = new TaskCompletionSource <RPCResponse>(); cts.Token.Register(() => { tcs.SetCanceled(); }); var nid = Interlocked.Increment(ref CommandId); c.id = nid; if (CommandQueue.TryAdd(nid, tcs)) { await Sock.Send(c); return(await tcs.Task); } else { Console.WriteLine("Failed to add command, skipping.."); } return(default);
private void Send(string data) { // Convert the string data to byte data using ASCII encoding. var byteData = Encoding.ASCII.GetBytes(data + "|"); // Begin sending the data to the remote device. Sock.Send(byteData); }
/// <summary> /// Send a packet to the other end /// </summary> /// <param name="ID">Packet identifier</param> /// <param name="Data">Byte array with Payload.</param> public void SendMessage(byte ID, byte[] Data) { byte[] Packet = new byte[3 + Data.Length]; byte[] PacketLength = new byte[2]; PacketLength = System.BitConverter.GetBytes(Data.Length); Packet[0] = PacketLength[0]; Packet[1] = PacketLength[1]; Packet[2] = ID; Data.CopyTo(Packet, 3); Sock.Send(Packet); }
internal void SendData(byte[] data) { Sock.Send(data); }
static void Main(string[] args) { var webSocket = new WebSocketServer("ws://0.0.0.0:30709"); webSocket.Start( Sock => { //Sock.OnOpen = () => Logger.Write("Anonymous Socket Connected"); Sock.OnClose = () => { UserList.ToList().ForEach((each) => { if (each.Value.Socket == Sock) { each.Value.Socket.Close(); each.Value.Socket = null; } }); }; Sock.OnMessage = (Message) => { string[] SplitText = Message.Split('|'); string User = SplitText[1]; switch (SplitText[0]) { case "MyNameIs": if (UserList.ContainsKey(SplitText[1])) { if (UserList[User].Socket == null) { UserList[User].Socket = Sock; Logger.Write("[{0}] Connected", User); } else if (UserList[User].Socket.IsAvailable) { Logger.Write("[Server] Already Connected in Server"); Sock.Send("AlreadyConnected"); return; } } else { UserList.Add(User, new UserObject(User, 10000000, Sock)); Logger.Write("[Server] new User => {0}", User); Logger.Write("[{0}] Connected", User); } if (Running) { Sock.Send("GameStart"); string Stocks = string.Empty; StockList.ForEach(Stock => { Stocks += $"|{Stock.Name}|{Stock.Price}"; }); Sock.Send($"HelloClient|{UserList[User].Point}{Stocks}"); Stocks = string.Empty; UserList[User].Stock.ToList().ForEach( Each => { Stocks += $"|{Each.Key}|{Each.Value}"; } ); Sock.Send($"MyStocks{Stocks}"); } else { Sock.Send("Wait"); } break; case "Buy": try { StockList.ForEach((Each) => { if (Each.Name == SplitText[2] && Each.Price * int.Parse(SplitText[3]) <= UserList[User].Point) { UserList[User].BuyStock(Each.Name, Each.Price, int.Parse(SplitText[3])); Sock.Send($"BuySuccess|{UserList[User].Point}|{Each.Name}|{UserList[User].Stock[Each.Name]}"); Logger.Write($"[{UserList[User].Name}] Buy {Each.Name} {Each.Price}원 {SplitText[3]}개"); return; } }); } catch (Exception ex) { Logger.Write("[Exception_Buy]", ex.Message); } break; case "Sell": try { StockList.ForEach((Each) => { if (Each.Name == SplitText[2] && UserList[User].Stock.ContainsKey(SplitText[2]) && UserList[User].Stock[SplitText[2]] >= int.Parse(SplitText[3])) { UserList[User].SellStock(Each.Name, Each.Price, int.Parse(SplitText[3])); Sock.Send($"SellSuccess|{UserList[User].Point}|{Each.Name}|{UserList[User].Stock[Each.Name]}"); Logger.Write($"[{UserList[User].Name}] Sell {Each.Name} {Each.Price}원 {SplitText[3]}개"); return; } }); } catch (Exception ex) { Logger.Write("[Exception_Sell]", ex.Message); } break; case "GetPrice": UserList[User].GetPrice = true; break; case "Prev": //Logger.Write(StockList[int.Parse(SplitText[2])].StockLog.ToString()); UserList[User].Socket.Send("PrevPrice|" + StockList[int.Parse(SplitText[2])].StockLog.ToString()); break; default: break; } }; } ); Cmd: var StrArg = Console.ReadLine(); var Cmd = StrArg.Split(); switch (Cmd[0].ToLower()) { case "delisting": if (StockList.Count < int.Parse(Cmd[1])) { Logger.Write("[Server] Stock Not Found"); goto Cmd; } if (StockList[int.Parse(Cmd[1])].Delisting) { Logger.Write("[Server] Already Delisting"); } else { StockList[int.Parse(Cmd[1])].Delisting = true; StockList[int.Parse(Cmd[1])].Price = 0; } goto Cmd; case "clearsocket": string UserName = StrArg.Replace("clearsocket ", ""); if (UserList.ContainsKey(UserName)) { UserList[UserName].Socket.Close(); UserList[UserName].Socket = null; } else { Logger.Write("[Server] User Not Found"); } goto Cmd; case "start": if (!Running) { Logger.Write("[==========시작==========]"); foreach (var Name in Const.StockNames) { var Stk = new Stock(Name, Utils.Price(), (int)Utils.GetValue(8, 11)); StockList.Add(Stk); Logger.Write("[Server] Create Stock:" + Name); } UserList.ToList().ForEach( Each => { string Stocks = string.Empty; StockList.ForEach(Stock => { Stocks += $"|{Stock.Name}|{Stock.Price}"; }); if (Each.Value.Socket != null) { Each.Value.Socket.Send("GameStart"); Each.Value.Socket.Send($"HelloClient|{Each.Value.Point}{Stocks}"); } } ); Running = true; new Thread(() => { doThread(); }) { IsBackground = true }.Start(); } else { Logger.Write("[Server] Already Started"); } goto Cmd; case "stop": Running = false; goto Cmd; case "exit": goto End; default: goto Cmd; } End: UserList.ToList().ForEach( Each => { if (Each.Value.Socket != null && Each.Value.Socket.IsAvailable) { Each.Value.Socket.Close(); } Each.Value.Socket = null; } ); Running = false; }