0%

查詢同事在幹麻

在上班時間把工作處理完畢後,不儘會好奇地想到我的那幾個同事在忙啥?,這篇文章就來實作查詢同事在幹麻功能,讓大家在互相幫助上無遠弗屆,增進彼此之間的情誼。

使用情境

同事們主要是使用Skype來傳遞訊息,最終目標是希望可以達成用傳送訊息的方式,完成關心對方的目的,並返回可以快速了解對方在幹麻的結果。

申請 Microsoft Bot Framework

要串接Skype勢必要申請該服務,詳情這裡不介紹。

訊息接收功能

當Bot正常運作後,要讓Server能夠即時的查詢各個同事在幹麻,我只想到在大家的電腦都裝上個程式來提供呼叫,在呼叫之前,我們必須讓接收到的訊息可以區分出各個同事,並且建立各個同事的相對應IP。

發送查詢命令

發送指令給各個同事的電腦,就選用Tcp吧。

1
2
3
4
5
6
var tcpClient = new TcpClient();
if (!tcpClient.ConnectAsync(ip, 8787).Wait(2000))
{
throw new Exception($"{userName}不想讓人知道他在幹麻");
}
var stream = tcpClient.GetStream();

查詢命令接收端

接收命令當然也如上面使用Tcp。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var listener = new TcpListener(IPAddress.Any, 8787);
listener.Start();
var recData = new byte[1024];
while (true)
{
try
{
if (listener.Pending())
{
Console.WriteLine($"有人想知道你在幹麻 - {DateTime.Now}");
}
}
catch (Exception ex)
{
}
}

接收端回傳螢幕截圖

要如何簡單有效的知道對方在幹麻呢?或許直接回傳螢幕截圖可以達到目的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var bounds = Screen.GetBounds(Point.Empty);
using (var bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (var g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save(memoryStream, ImageFormat.Jpeg);
}
var client = listener.AcceptTcpClient();
var fileBytes = memoryStream.ToArray();
var netstream = client.GetStream();
netstream.Write(fileBytes, 0, fileBytes.Length);
netstream.Close();
client.Close();

取得查詢結果並回傳至聊天室

將接收到的stream轉為byte。

1
2
3
4
5
6
7
8
9
10
11
12
13
int totalrecbytes = 0;
var result = new MemoryStream();
int recBytes;
byte[] recData = new byte[1000];
while ((recBytes = stream.Read(recData, 0, recData.Length)) > 0)
{
result.Write(recData, 0, recBytes);
totalrecbytes += recBytes;
}
result.Close();
stream.Close();
tcpClient.Close();
return result.ToArray();

執行結果

這時當有人在聊天室詢問某人在幹麻時,接收端就會收到訊息。

並在聊天室顯示該名同事的桌面。

對方關閉的話也會提示相關訊息。

心得

哇~同事在幹麻真的一覽無遺了呢!但後來他們都不開,我寫這麼辛苦,真的hen心寒。